package com.parking.status.sync.netty.server;

import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;

/**
 * Created by Administrator on 2015/9/15.
 */
public class ServerFrameDecoder extends LengthFieldBasedFrameDecoder {

    // 第一个参数为信息最大长度，超过这个长度回报异常，
    // 第二参数为长度属性的起始（偏移）位，我们的协议中长度是2到第2个字节，所以这里写2，
    // 第三个参数为“长度属性”的长度，我们是1个字节，所以写1，
    // 第四个参数为长度调节值，在总长被定义为包含包头长度时，修正信息长度，
    // 第五个参数为跳过的字节数，根据需要我们跳过前3个字节，以便接收端直接接受到不含“长度属性”的内容。
    public ServerFrameDecoder(int maxFrameLength, int lengthFieldOffset,
                              int lengthFieldLength,int lengthAdjustment, int initialBytesToStrip) {
        super(maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip);
    }

    public ServerFrameDecoder() {
//        数据帧帧格式 单位为字节
//        名称 帧头 帧长度 帧序号 发送方地址 接收方地址 控制字 数据内容 校验字 帧尾
//        长度  2     1     2      4         4        1    可变     2     1
        this(2 + 1 + 2 + 4 + 4 + 1 + 255 + 2 + 1, 2, 1, 3, 3); //这里根据协议规定，第一个的参数可能就是255
    }

    @Override
    protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
        return super.decode(ctx, in);
    }
}